package com.qfjy.homework.zhangzheng;

/**观察者模式
 *当对象间存在一对多关系时，则使用观察者模式（Observer Pattern）。
 * 比如，当一个对象被修改时，则会自动通知依赖它的对象。观察者模式属于行为型模式
 *
 * 优点：
 * 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。
 *
 * 缺点：
 * 1、如果一个被观察者对象有很多的直接和间接的观察者的话，将所有的观察者都通知到会花费很多时间。
 * 2、如果在观察者和观察目标之间有循环依赖的话，观察目标会触发它们之间进行循环调用，可能导致系统崩溃。
 * 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的，而仅仅只是知道观察目标发生了变化。
 *
 * 使用场景：
 * 需要在系统中创建一个触发链，A对象的行为将影响B对象，B对象的行为将影响C对象……，可以使用观察者模式创建一种链式触发机制。
 * 一个对象的改变将导致其他一个或多个对象也发生改变，而不知道具体有多少对象将发生改变，可以降低对象之间的耦合度。
 * @date: 2022/6/30 0:52
 * @version: 1.0
 */
public class TestDemo {
    public static void main(String[] args) {
        ZhangSan zhangSan = new ZhangSan();
        WangWu wangWu = new WangWu();
        LiSi liSi = new LiSi();
        zhangSan.borrow(wangWu);
        zhangSan.borrow(liSi);
        zhangSan.setState(1);
        Integer state = zhangSan.getState();
        if(state==0){
            System.out.println("没钱。。");
            return;
        }
        zhangSan.notifyAllObservers();

    }
}
